#ifndef IGAME_H
#define IGAME_H
#include "StompedReality/Core.h"
namespace Json
{
class Value;
}
namespace StompedReality
{
class GameTime;
namespace Graphics
{
class RenderSystem;
}
namespace Input
{
class InputSystem;
}
namespace Core
{
class MessageSystem;
class Component;
template <class T>
class ObjectPoolManager;
class TaskManager;
class SystemMessageProcessor;
}
namespace Asset
{
class AssetManager;
}
namespace Utility
{
class FileSystem;
}
class DLL_EXPORT IGame
{
 public:

  IGame( ) {
  }

  virtual ~IGame( ) {
  }

  virtual bool ParseConfig ( const char* fileName ) = 0;

  virtual bool IsInitialized( ) = 0;

 public:

  virtual StompedReality::GameTime* getGameTime( ) = 0;
  virtual StompedReality::Core::ObjectPoolManager<StompedReality::Core::Component>* getComponentSystem( ) = 0;
  virtual StompedReality::Graphics::RenderSystem* RenderSystem( ) = 0;
  virtual void setRenderer ( StompedReality::Graphics::RenderSystem* render ) = 0;
  virtual StompedReality::Core::MessageSystem* MessageSystem( ) = 0;
  virtual StompedReality::Input::InputSystem* InputSystem( ) = 0;
  virtual StompedReality::Core::SystemMessageProcessor* getSysMsgProcessor( ) = 0;
  virtual StompedReality::Utility::FileSystem* getFileSystem( ) = 0;
  virtual StompedReality::Asset::AssetManager* getAssetManager( ) = 0;

 public:

  // loop & other stuff
  virtual void loop( ) {
  };
};

}
#endif // GAME_H
